package com.itheima.service.impl;

import com.itheima.dao.AccountDao;
import com.itheima.pojo.Account;
import com.itheima.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author zhangyan
 * @date 2021/2/1 10:43
 * <p>
 * Bean的定义(@Component)
 * - 名称：@Component @Controller @Service @Repository
 * - 类型：类注解
 * - 位置：类定义上方
 * - 作用：设置该类为spring管理的bean
 * <p>
 * 说明：
 * - @Controller、@Service 、@Repository是@Component的衍生注解，功能同@Component
 * 可以通用,但一般按规定来
 * - @Controller   用于Controller层的类 :表现层
 * - @Service      用于Service层的类： 业务层
 * - @Repository   用于Dao层的类： 持久层（一般不写）
 * 相关属性
 * - value（默认）：定义bean的访问id ,   默认的id名称为 "简单类名，首字母小写"
 */

//@Component("accountService")
@Service("accountService")
public class AccountServiceImpl implements AccountService {

    /**
     * 注入Bean(@Autowired)
     * -  名称：@Autowired、@Qualifier、@Resource
     * -  类型：属性注解、方法注解
     * -  位置：可以用在属性上和set方法上， 可以没有set方法
     * -  作用：自动装配，设置属性的对象或对方法进行传参(从IOC容器中查找对象 来赋值给属性)
     * <p>
     * 说明：
     * - @Autowired   按类型装配，一般生产中都使用它,由spring提供的，只有引入spring包才可使用。
     * - @Qualifier   可以指定bean的id，一般用于有多个同一类型bean的场景(必须配合@Autowired使用)。
     * - @Resource    相当于同时指定了@Autowired和@Qualifier，由Jdk提供的，了解即可
     * 注解的方式注入bean，不需要setter方法
     * 相关属性
     * - @Autowired
     * - required：定义该属性是否允许为null,默认true
     * - @Qualifier
     * - value：需要注入的bean的id
     * - @Resource
     * - name：需要注入的bean的id 可省略
     */
    @Autowired
    // 自动装配，设置属性的对象或对方法进行传参(从IOC容器中查找对象 来赋值给属性),代替了set方法
    // @Resource(name = "accountDao")
    AccountDao accountDao;

    @Override
    public Account findById(Integer id) {

        return accountDao.findById(id);
    }
}
